home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Libris Britannia 4
/
science library(b).zip
/
science library(b)
/
MATH
/
MFLOAT10.ZIP
/
MFLOAT.CXX
< prev
next >
Wrap
C/C++ Source or Header
|
1993-04-28
|
10KB
|
191 lines
#ifndef mfloat_cxx
#define mfloat_cxx
#include "mfloat.h"
#include <iomanip.h>
#include <math.h>
#pragma intrinsic -fabs
#undef mfloat
class mfloat {
#define fmo friend mfloat operator
#define fro friend mfloat& operator
#define fbo friend char operator
public:
mfloat() { mf[0] = 0; }
mfloat(const mfloat &a) { equm(this->mf,a.mf); }
mfloat(const long double a) { ldtomf(this->mf,a); }
mfloat& operator = (const mfloat &a) { equm(this->mf,a.mf); return(*this); }
fmo + (const mfloat &a) { return(a); }
fro ++ (mfloat &a) /*prefix*/ { addm(a.mf,onem); return(a); }
fmo ++ (mfloat &a,int) /*suffix*/ { mfloat t; equm(t.mf,a.mf); addm(a.mf,onem); return(t); }
fro -- (mfloat &a) /*prefix*/ { subm(a.mf,onem); return(a); }
fmo -- (mfloat &a,int) /*suffix*/ { mfloat t; equm(t.mf,a.mf); subm(a.mf,onem); return(t); }
fmo - (mfloat a) { negm(a.mf); return(a); }
fmo + (mfloat a, const mfloat &b) { addm(a.mf,b.mf); return(a); }
fro += (mfloat &a, const mfloat &b) { addm(a.mf,b.mf); return(a); }
fmo - (mfloat a, const mfloat &b) { subm(a.mf,b.mf); return(a); }
fro -= (mfloat &a, const mfloat &b) { subm(a.mf,b.mf); return(a); }
fmo * (mfloat a, const mfloat &b) { multm(a.mf,b.mf); return(a); }
fmo * (mfloat a, const unsigned int b) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fmo * (mfloat a, const int b) { multi(a.mf,b); return(a); }
fmo * (mfloat a, const unsigned long b) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fmo * (mfloat a, const long b) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fmo * (mfloat a, const double b) { mfloata t; multm(a.mf,dtomf(t,b)); return(a); }
fmo * (mfloat a, const long double b) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fmo * (const unsigned int b ,mfloat a) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fmo * (const int b ,mfloat a) { multi(a.mf,b); return(a); }
fmo * (const unsigned long b ,mfloat a) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fmo * (const long b ,mfloat a) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fmo * (const double b ,mfloat a) { mfloata t; multm(a.mf,dtomf(t,b)); return(a); }
fmo * (const long double b ,mfloat a) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fro *= (mfloat &a, const mfloat &b) { multm(a.mf,b.mf); return(a); }
fro *= (mfloat &a, const unsigned int b) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fro *= (mfloat &a, const int b) { multi(a.mf,b); return(a); }
fro *= (mfloat &a, const unsigned long b) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fro *= (mfloat &a, const long b) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fro *= (mfloat &a, const double b) { mfloata t; multm(a.mf,dtomf(t,b)); return(a); }
fro *= (mfloat &a, const long double b) { mfloata t; multm(a.mf,ldtomf(t,b)); return(a); }
fmo / (mfloat a, const mfloat &b) { divm(a.mf,b.mf); return(a); }
fmo / (mfloat a, const unsigned int b) { mfloata t; divm(a.mf,ldtomf(t,b)); return(a); }
fmo / (mfloat a, const int b) { divi(a.mf,b); return(a); }
fmo / (mfloat a, const unsigned long b) { mfloata t; divm(a.mf,ldtomf(t,b)); return(a); }
fmo / (mfloat a, const long b) { mfloata t; divm(a.mf,ldtomf(t,b)); return(a); }
fmo / (mfloat a, const double b) { mfloata t; divm(a.mf,dtomf(t,b)); return(a); }
fmo / (mfloat a, const long double b) { mfloata t; divm(a.mf,ldtomf(t,b)); return(a); }
fro /= (mfloat &a, const mfloat &b) { divm(a.mf,b.mf); return(a); }
fro /= (mfloat &a, const unsigned int b) { mfloata t; divm(a.mf,ldtomf(t,b)); return(a); }
fro /= (mfloat &a, const int b) { divi(a.mf,b); return(a); }
fro /= (mfloat &a, const unsigned long b) { mfloata t; divm(a.mf,ldtomf(t,b)); return(a); }
fro /= (mfloat &a, const long b) { mfloata t; divm(a.mf,ldtomf(t,b)); return(a); }
fro /= (mfloat &a, const double b) { mfloata t; divm(a.mf,dtomf(t,b)); return(a); }
fro /= (mfloat &a, const long double b) { mfloata t; divm(a.mf,ldtomf(t,b)); return(a); }
fbo < (const mfloat &a, const mfloat &b) { return(gtm(b.mf,a.mf)); }
fbo > (const mfloat &a, const mfloat &b) { return(gtm(a.mf,b.mf)); }
fbo <= (const mfloat &a, const mfloat &b) { return(!gtm(a.mf,b.mf)); }
fbo >= (const mfloat &a, const mfloat &b) { return(!gtm(b.mf,a.mf)); }
fbo == (const mfloat &a, const mfloat &b) { return(eqm(a.mf,b.mf)); }
fbo != (const mfloat &a, const mfloat &b) { return(!eqm(a.mf,b.mf)); }
friend ostream& operator<< (ostream& os, const mfloat &a);
friend istream& operator>> (istream& is, mfloat &a);
/* basic functions */
friend int strtomf(mfloat &a, const char *s) { return(strtomf_(a.mf,s,strlen(s))); }
friend char far * mftoa(char far * str, const mfloat &a, int len) { mftostr_(str,a.mf,&len,".32767F"); str[len]=0; return str; };
friend char far * mftostr(char far * str, const mfloat &a, int len, const char far * format) { mftostr_(str,a.mf,&len,format); str[len]=0; return str; };
friend double mftod(const mfloat &a) { return(mftod(a.mf)); }
friend long double mftold(const mfloat &a) { return(mftold(a.mf)); }
/* standard functions (Borland C: MATH.H */
friend mfloat acos(mfloat a) { acosm(a.mf); return(a); }
friend mfloat asin(mfloat a) { asinm(a.mf); return(a); }
friend mfloat atan(mfloat a) { atanm(a.mf); return(a); }
friend mfloat atan2(mfloat a, const mfloat &b) { atan2m(a.mf, b.mf); return(a); }
/*?*/friend mfloat atofm(const char *s) { mfloat t; strtomf_(t.mf,s,strlen(s)); return(t); }
friend mfloat ceil(mfloat a) { ceilm(a.mf); return(a); }
friend mfloat cos(mfloat a) { cosm(a.mf); return(a); }
friend mfloat cosh(mfloat a) { coshm(a.mf); return(a); }
friend mfloat exp(mfloat a) { expm(a.mf); return(a); }
friend mfloat fabs(mfloat a) { fabsm(a.mf); return(a); }
friend mfloat floor(mfloat a) { floorm(a.mf); return(a); }
friend mfloat fmod(mfloat a, const mfloat &b) { fmodm(a.mf, b.mf); return(a); }
friend mfloat frexp(mfloat a, int *b) { frexpm(a.mf,b); return(a); }
friend mfloat hypot(mfloat a, const mfloat &b) { hypotm(a.mf, b.mf); return(a); }
friend mfloat ldexp(mfloat a, int b) { ldexpm(a.mf, b); return(a); }
friend mfloat log(mfloat a) { logm(a.mf); return(a); }
friend mfloat log10(mfloat a) { log10m(a.mf); return(a); }
friend mfloat modf(mfloat a, mfloat * b) { modfm(a.mf, (*b).mf); return(a); }
friend mfloat pow(mfloat a, const mfloat &b){ powm(a.mf, b.mf); return(a); }
/*?*/friend mfloat pow10m(int b) { mfloat a; pow10m(a.mf, b); return(a); }
friend mfloat sin(mfloat a) { sinm(a.mf); return(a); }
friend mfloat sinh(mfloat a) { sinhm(a.mf); return(a); }
friend mfloat sqrt(mfloat a) { sqrtm(a.mf); return(a); }
friend mfloat tan(mfloat a) { tanm(a.mf); return(a); }
friend mfloat tanh(mfloat a) { tanhm(a.mf); return(a); }
/* extended standard functions */
friend mfloat acosh(mfloat a) { acoshm(a.mf); return(a); }
friend mfloat asinh(mfloat a) { asinhm(a.mf); return(a); }
friend mfloat atanh(mfloat a) { atanhm(a.mf); return(a); }
friend mfloat acot(mfloat a) { acotm(a.mf); return(a); }
friend mfloat acoth(mfloat a) { acothm(a.mf); return(a); }
friend mfloat cot(mfloat a) { cotm(a.mf); return(a); }
friend mfloat coth(mfloat a) { cothm(a.mf); return(a); }
friend mfloat exp10(mfloat a) { exp10m(a.mf); return(a); }
friend mfloat sqr(mfloat a) { sqrm(a.mf); return(a); }
friend mfloat trunc(mfloat a) { truncm(a.mf); return(a); }
//private:
mfloata mf;
#undef fmo
#undef fro
#undef fbo
};
#define maxdigits (mfloatwords*24/5+8)
ostream& operator<< (ostream& os, const mfloat &a) {
char ch[maxdigits];
int len = maxdigits;
char format[10];
char * f = format;
if (os.flags() & os.showpos) *(f++) = '+';
if (os.flags() & os.showpoint) *(f++) = '.';
f +=5;
int i = os.precision();
if (i <= 0) i = 6;
for (int j=0; j<5; j++) { *(--f) = i % 10 + '0'; i /= 10; }
f += 5;
if (os.flags() & os.fixed) *f = 'f';
else if (os.flags() & os.scientific) *f = 'e';
else *f = 'g';
if (os.flags() & os.uppercase) *f -= 'a'-'A';
*(++f) = 0;
mftostr_(ch,a.mf,&len,format);
ch[len] = 0;
os << ch;
return os;
}
istream& operator>> (istream& is, mfloat &a) {
char ch[maxdigits];
int old = is.width(maxdigits);
is >> ch;
is.width(old);
if (ch[0] == 0) {
is.clear(ios::badbit | is.rdstate());
equm(a.mf,zerom);
}
else if (strtomf(a.mf,ch) != 0) {
is.clear(ios::failbit | is.rdstate());
equm(a.mf,zerom);
}
return(is);
}
#undef maxdigits
const mfloat pi = 2 * acos((mfloat) 0);
#endif /* #ifndef mfloat_cxx */